与树共舞:分形舞蹈可视化
导语
通过舞蹈的形式,探索分形的可视化问题。
编译:集智俱乐部翻译组
来源:wired.com
原题:
How to Dance with a Tree: Visualizing Fractals With Dance
几周之前,我和朋友Upasana一起,搞了一个有趣的项目。我们通过舞蹈的形式,探索分形的可视化问题,这是一种将表演和数学相结合的自动生成艺术。
Kinect传感器和Processing语言是实现这个项目的两个关键要素,前者能够让计算机跟踪用户身体的移动轨迹,后者则是一种编程语言,能够让你用代码创建交互式的视觉效果。将这两者结合在一起,你就可以用你的身体来控制可视化的形状和对象。
https://v.qq.com/txp/iframe/player.html?vid=w1346gog82u&width=500&height=375&auto=0
与树共舞
去年10月底,我走在回家的路上,道路两旁光秃秃的树枝在风中摇曳,我懒洋洋地看着那些树枝,一个想法突然出现在了我的脑海中。出于某种原因,我突然想知道当一晚上的树是怎样的体验——想象着举起你的双臂,像树一样,挥动它的树枝。
之后,我想起在Daniel Shiffman的《 Nature of Code》中,看到过关于分形的内容。有一些结构,当你持续地放大它们,它们看起来依然和原始的结构很相似,这种奇妙而错综复杂的结构,就是分形。作为分形界最早的探索者之一,Benoit B. Mandelbrot创造了分形这个词,并把它描述城一种“整体缩小版”的几何图形。
(分形界的一个小幽默:Benoit B. Mandelbrot中的B代表什么?Benoit B. Mandelbrot。)
每一个部分都和整体相似,这种“自相似性”就是分形的核心思想。想想看地图上的海岸线,在不同的缩放级别上,它们总会呈现出相似的脉络,山脉的锯齿状地形也是如此。
或者我们来想象下,闪电向下传播到地面时,所经历的分支路径。
或者蕨类植物中叶子的嵌套排列。
再或者是Romanesco西兰花头上的花蕾。每个芽上都有较小的芽,这些芽以相同的螺旋形排列在一起。
从海岸线到西兰花,从闪电到树木,自然界中的许多模式(patterns)都可以用分形来描述,而不是通常的线条,圆形和三角形等形状。(在现实世界中,物体只能是大致分形的,到了某种尺度,分形将会结束。但在数学中,分形的自相似性将永远存在。)
虽然圆形和三角形等形状是简约的本质,但另一方面,分形在它们的无线微分中包含着一种有机的复杂性。就像山峰和三角形之间有着天壤之别,分形却可以很好地表示山峰。
分形产生了类似于山脉的地形。
这又让我的思绪回到了树上,你可以把树想成分形的样子。下面是一棵树的草图。
仔细看,就像Mandelbort说的那样,每一个分支都是“整体的缩小版”。
举个例子,来看看这张图像。
你可能认为你在看着一整棵树,但实际上,这是一幅向周围蔓延的树枝的图像。(我当时躺在树下,仰望着它,拍了这张照片。)树枝们看起来就像一颗小树,也就是我们想要捕捉到的“自相似性”。
在《Code of Nature》这本书中,Daniel Shiffman实现了用一个简单的算法 ,来绘制这样的分形树。
为了能自由控制分形的形状,我对他的代码做了一点调整,可以通过移动鼠标来修改树枝的角度,既而生成树的动画。你可以去自己玩一下:
http://www.princeton.edu/~aatishb/processing/tree_noleaves/
我尝试添加一些树叶,使树变得更漂亮。
可以玩一下这个可互动版本的分形树:
http://www.princeton.edu/~aatishb/processing/tree_leaves/
接下来,为了实现通过自己的身体控制这棵树,我们需要和Kinect传感器结合起来。在这里,我调用了Simple-OpenNI库(我之前发布过关于Kinect hacking的帖子,您可以在那里了解到Simple-OpenNI是如何工作的),实现这一功能。我的朋友Upasana Roy自愿扮演舞者和木偶的角色(见本文顶部的视频)。
瞧,她挥了一下手,就创造了一颗分形树,手的角度(从臀部测量到的)控制了分形树中分支的角度。她身体所在的物理空间被映射到了一个抽象的数学空间(在这种情况下,通过改变这棵树的分支角度,你可以得到数学空间里的整颗分形树)。
我们就先探索到这里,但实际上,你可能还有兴趣去探索其他虚拟的形状,物体和空间。
Q&A
第一次玩这个游戏的时候有什么感受?
一开始很有挫败感。大部分情况下,我的动作对于分形树的改变没有任何效果,但有时候这棵树又会突然发生一些变化。即使我以一种平滑的方式移动胳膊,分形树也会发生突变,我感到一头雾水。
玩了一段时间后有什么感受?
我发现,当我在跳舞的时候,我需要让胳膊在我周围的整个空间环绕。但同时,在这种情况下,系统对某些空间的反应,比对空间中其他部分的反应更敏感。比如说,上下移动手臂时分形的变化远远超过左右移动手臂的效果。
你是如何编排舞蹈的?有什么困难的地方和好玩的地方吗?
玩儿了一段时间后,我找到了我的手臂位置和分形设计之间的关系,接着我就可以以一种可预测的方式来移动了。明白这一点后,就是一个关于分形图案的游戏了,音乐是其中好玩的部分!最难的地方在于要一直举着手臂!
我在空气中不断地移动着我的手,但我并没有看到我所做的动作,而是由我的动作衍生出的变形版本,这让我觉得自己有点像一个高科技的木偶操作者。在空气中用抽象的手部运动来控制树的形状,实在是太酷了!
参考资料:
在Max Rheiner(编写的OpenNI库,可以让你在Processing中运用Kinect传感器)和Dan Shiffman(编写了递归树代码) 代码的基础上,进行了修改,得到了本文的可视化处理代码,您可以到后附网址获取:
http://www.openprocessing.org/sketch/174694
Dan Shiffman的著作《Nature of Code》中的分形章节。
Greg Borenstein的帖子Making Things See是一篇关于如何在Processing中使用Kinect的非常方便的指南。
我之前的一篇文章,介绍了如何使用Kinect制作舞蹈视频:https://www.wired.com/2014/12/empzeal-fractal-tree/
非常感谢Upasana Roy愿意跳舞,跳到她再也无法举起自己的双臂。
翻译:尚奇奇
审校:刘培源
编辑:王怡蔺
原文:
https://www.wired.com/2014/12/empzeal-fractal-tree/
推荐课程
https://campus.swarma.org/gcou=10419
推荐阅读
集智QQ群|292641157
商务合作及投稿转载|swarma@swarma.org
◆ ◆ ◆
搜索公众号:集智俱乐部
加入“没有围墙的研究所”
让苹果砸得更猛烈些吧!